#include<bits/stdc++.h>
using namespace std;
long long n, m, sz, t, rc, a[100001], c[100001], x[5], na[100001];
pair<long long,long long> wi[100001];
string d[31];
long long ans;
int main()
{
	freopen("arena.in","r",stdin);
	freopen("arena.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	for(int i=1;i<=n;i++)
		scanf("%lld",&c[i]);
	while(true)
	{
		cin>>d[++sz];
		if(d[sz]=="0" || d[sz]=="1")
			break;
	}
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld%lld%lld%lld",&x[0],&x[1],&x[2],&x[3]);
		for(int i=1;i<=n;i++)
			na[i]=a[i]^x[i%4];
		ans=0;
		for(long long i=1;i<=n;i++)
		{
			int len=c[i];
			for(int j=1;j<=len;j++)
				wi[j]={na[j],j};
			rc=0;
			for(int j=1;j<=sz;j++)
			{
				if(len<(int)d[j].size())
					continue;
				len/=2;
				rc++;
				for(int k=1;k<=len;k++)
				{
					if(d[j][k]=='1')
					{
						if(wi[k*2].first>=rc)
							wi[k]=wi[k*2];
						else
							wi[k]=wi[k*2-1];
					}
					if(d[j][k]=='0')
					{
						if(wi[k*2-1].first>=rc)
							wi[k]=wi[k*2-1];
						else
							wi[k]=wi[k*2];
					}
				}
			}
			ans=ans^(wi[1].second*i);
		}
		printf("%lld\n",ans);
	}
	return 0;
}